home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / linux / posix_acl.h < prev    next >
C/C++ Source or Header  |  2005-10-13  |  2KB  |  87 lines

  1. /*
  2.   File: linux/posix_acl.h
  3.  
  4.   (C) 2002 Andreas Gruenbacher, <a.gruenbacher@computer.org>
  5. */
  6.  
  7.  
  8. #ifndef __LINUX_POSIX_ACL_H
  9. #define __LINUX_POSIX_ACL_H
  10.  
  11. #include <linux/slab.h>
  12.  
  13. #define ACL_UNDEFINED_ID    (-1)
  14.  
  15. /* a_type field in acl_user_posix_entry_t */
  16. #define ACL_TYPE_ACCESS        (0x8000)
  17. #define ACL_TYPE_DEFAULT    (0x4000)
  18.  
  19. /* e_tag entry in struct posix_acl_entry */
  20. #define ACL_USER_OBJ        (0x01)
  21. #define ACL_USER        (0x02)
  22. #define ACL_GROUP_OBJ        (0x04)
  23. #define ACL_GROUP        (0x08)
  24. #define ACL_MASK        (0x10)
  25. #define ACL_OTHER        (0x20)
  26.  
  27. /* permissions in the e_perm field */
  28. #define ACL_READ        (0x04)
  29. #define ACL_WRITE        (0x02)
  30. #define ACL_EXECUTE        (0x01)
  31. //#define ACL_ADD        (0x08)
  32. //#define ACL_DELETE        (0x10)
  33.  
  34. struct posix_acl_entry {
  35.     short            e_tag;
  36.     unsigned short        e_perm;
  37.     unsigned int        e_id;
  38. };
  39.  
  40. struct posix_acl {
  41.     atomic_t        a_refcount;
  42.     unsigned int        a_count;
  43.     struct posix_acl_entry    a_entries[0];
  44. };
  45.  
  46. #define FOREACH_ACL_ENTRY(pa, acl, pe) \
  47.     for(pa=(acl)->a_entries, pe=pa+(acl)->a_count; pa<pe; pa++)
  48.  
  49.  
  50. /*
  51.  * Duplicate an ACL handle.
  52.  */
  53. static inline struct posix_acl *
  54. posix_acl_dup(struct posix_acl *acl)
  55. {
  56.     if (acl)
  57.         atomic_inc(&acl->a_refcount);
  58.     return acl;
  59. }
  60.  
  61. /*
  62.  * Free an ACL handle.
  63.  */
  64. static inline void
  65. posix_acl_release(struct posix_acl *acl)
  66. {
  67.     if (acl && atomic_dec_and_test(&acl->a_refcount))
  68.         kfree(acl);
  69. }
  70.  
  71.  
  72. /* posix_acl.c */
  73.  
  74. extern struct posix_acl *posix_acl_alloc(int, int);
  75. extern struct posix_acl *posix_acl_clone(const struct posix_acl *, int);
  76. extern int posix_acl_valid(const struct posix_acl *);
  77. extern int posix_acl_permission(struct inode *, const struct posix_acl *, int);
  78. extern struct posix_acl *posix_acl_from_mode(mode_t, int);
  79. extern int posix_acl_equiv_mode(const struct posix_acl *, mode_t *);
  80. extern int posix_acl_create_masq(struct posix_acl *, mode_t *);
  81. extern int posix_acl_chmod_masq(struct posix_acl *, mode_t);
  82.  
  83. extern struct posix_acl *get_posix_acl(struct inode *, int);
  84. extern int set_posix_acl(struct inode *, int, struct posix_acl *);
  85.  
  86. #endif  /* __LINUX_POSIX_ACL_H */
  87.